;C prototype: void CopyScreenBufferToScreen3 (void *src, void *dest1, void *dest2);
;
;void CopyScreenBufferToScreen3 (register void *src asm("%a0"),
;		      register void *dest1 asm("%a1"),
;		      register void *dest2 asm("%a2"));

	xdef CopyScreenBufferToScreen3

CopyScreenBufferToScreen3:	
	move.l	d3,-(a7)
	move.l	d4,-(a7)

	moveq.l	#99,d4
bcl_allline:
	moveq.l	#4,d3
bcl_line:
;lightplane
	;--------
	;Partie 1
	move.l	(a0),d0
	
	;1
	move.l	d0,d1
	and.l	#%11000000000000001100000000000000,d1
	and.l	#%00001110011100110000111001110011,d0
	lsl.l	#2,d0
	or.l	d0,d1
	and.l	#%11111000000000001111100000000000,d1
	
	;2
	and.l	#%00000001110011000000000111001100,d0
	lsl.l	#2,d0
	or.l	d0,d1
	and.l	#%11111111000000001111111100000000,d1
	
	;3
	and.l	#%00000000001100000000000000110000,d0
	lsl.l	#2,d0
	or.l	d0,d1
	and.l	#%11111111110000001111111111000000,d1
	
		
	;Fusion
	move.l	d1,d0
	and.l	#%00000000000000001111111111000000,d1
	lsl.l	#6,d1
	and.l	#%11111111110000000000000000000000,d0
	or.l	d0,d1
	
		
	;Partie3
	move.w	4(a0),d0
	
	;1
	move.w	d0,d2
	or.w	d0,d2
	and.w	#%1100000000000000,d2
	add.w	d0,d0
	and.w	#%0011101101110110,d0
	or.w	d0,d2
	and.w	#%1111100000000000,d2
	
	;2
	add.w	d0,d0
	and.w	#%0000011011101100,d0
	or.w	d0,d2
	and.w	#%1111111000000000,d2
	
	;3
	add.w	d0,d0
	and.w	#%0001110111011000,d0
	or.w	d0,d2
	and.w	#%1111111111000000,d2
	
	;4
	add.w	d0,d0
	and.w	#%0000000000110000,d0
	or.w	d0,d2
	and.w	#%1111111111110000,d2
	
	lsr.w	#4,d2
	or.w	d2,d1
	
	
	move.l	d1,(a1)
	
	
;darkplane
	;--------
	;Partie 1
	move.l	6000(a0),d0

	;1
	move.l	d0,d1
	and.l	#%11000000000000001100000000000000,d1
	and.l	#%00001110011100110000111001110011,d0
	lsl.l	#2,d0
	or.l	d0,d1
	and.l	#%11111000000000001111100000000000,d1
	
	;2
	and.l	#%00000001110011000000000111001100,d0
	lsl.l	#2,d0
	or.l	d0,d1
	and.l	#%11111111000000001111111100000000,d1
	
	;3
	and.l	#%00000000001100000000000000110000,d0
	lsl.l	#2,d0
	or.l	d0,d1
	and.l	#%11111111110000001111111111000000,d1
	
		
	;Fusion
	moveq.l	#0,d0
	move.l	d1,d0
	and.l	#%00000000000000001111111111000000,d1
	lsl.l	#6,d1
	and.l	#%11111111110000000000000000000000,d0
	or.l	d0,d1
	
	;Partie3
	move.w	6000+4(a0),d0
	
	;1
	move.w	d0,d2
	or.w	d0,d2
	and.w	#%1100000000000000,d2
	add.w	d0,d0
	and.w	#%0011101101110110,d0
	or.w	d0,d2
	and.w	#%1111100000000000,d2
	
	;2
	add.w	d0,d0
	and.w	#%0000011011101100,d0
	or.w	d0,d2
	and.w	#%1111111000000000,d2
	
	;3
	add.w	d0,d0
	and.w	#%0001110111011000,d0
	or.w	d0,d2
	and.w	#%1111111111000000,d2
	
	;4
	add.w	d0,d0
	and.w	#%0000000000110000,d0
	or.w	d0,d2
	and.w	#%1111111111110000,d2
	
	lsr.w	#4,d2
	or.w	d2,d1
	
	move.l	d1,(a2)
	
	addq.l	#6,a0
	addq.l	#4,a1
	addq.l	#4,a2
	dbf	d3,bcl_line
	
	lea.l	30(a0),a0
	lea.l	10(a1),a1
	lea.l	10(a2),a2
	dbf	d4,bcl_allline
	
	move.l	(a7)+,d4
	move.l	(a7)+,d3
	rts